Проба ССим.
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ ПроССим+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: нахождение собственных значений симметричной матрицы
 *   рекуррентным методом Якоби
 *
 * ПРИМЕЧАНИЯ: 
 *   В данном приложении метод применяется к матрице Гильберта. Известно, что
 *   матрица Гильберта является плохо обусловленной (отношение наименьшего
 *   собственного значения к наименьшему очень мало).
 *   Метод Якоби применяет к исходной матрице такие перевороты, чтобы
 *   получить диагональную матрицу. В итоге, на диагонали будут находиться
 *   собственные значения, а исходная матрица будет содержать собственные
 *   вектора.
 *   Переменная <точность> определяет в каких случаях недиагональный элемент
 *   преобразуемой матрицы будет рассматриваться как 0 (выраженный как
 *   дробь от суммы квадратов диагональных элементов).
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  Матем  ИЗ "...\Отделы\Числа\",
  Вект   ИЗ "...\Отделы\Числа\",
  Матр   ИЗ "...\Отделы\Числа\",
  Собств ИЗ "...\Отделы\Числа\",
  МатрВВ ИЗ "...\Отделы\Числа\",
  Вывод  ИЗ "...\Отделы\Обмен\";
 
ПОСТ
  порядок=6;      (* порядок системы *) 
  проходов=500;   (* наибольшее допустимое число проходов вычисления *)

(******************************************************************************)
ЗАДАЧА Гильберт(М+:Матр.Вид); 
(* Построение матрицы Гильберта порядок-го порядка 
     ( 1      1/2     1/3     1/4     ... 1/порядок      ) 
     ( 1/2    1/3     1/4     1/5     ... 1/(порядок+1)  ) 
 М = ( 1/3    1/4     1/5     1/6     ... 1/(порядок+2)  ) 
     ( ........................................... ) 
     ( 1/порядок    1/(порядок+1) 1/(порядок+2) 1/(порядок+3) ... 1/(2N-1) ) *) 
ПЕР 
  i,j,посл:ЦЕЛ; 
УКАЗ 
  посл:=РАЗМЕР(М)-1;
                       (* первая строка *) 
  М[0,0]:=1; 
  ОТ j:=1 ДО посл ВЫП 
    М[0,j]:=1/(j+1) 
  КОН; 
                       (* оставшиеся строки *) 
  ОТ i:=1 ДО посл ВЫП 
                           (* последний столбец *) 
    М[i,посл]:=1/(посл+i+1); 
                           (* заполнить матрицу *) 
    ОТ j:=0 ДО посл-1 ВЫП 
      М[i,j]:=М[i-1,j+1]
    КОН 
  КОН 
КОН Гильберт; 
 
(******************************************************************************)
ЗАДАЧА Голова;
ПЕР 
  М :Матр.Доступ;     (* исходная матрица                 *) 
  СВ:Матр.Доступ;     (* матрица с собственными векторами *) 
  сз:Вект.Доступ;     (* собственные значения             *) 
  точность:Матем.Вещ; (* точность вычислений              *)
УКАЗ
  точность:=Матем.квкор(Матем.МАШЕПС);
  СОЗДАТЬ,порядок,порядок);
  СОЗДАТЬ(СВ,порядок,порядок);
  СОЗДАТЬ(сз,порядок);
  Гильберт(М^);
  ЕСЛИ Собств.Якоби(М^,проходов,точность,СВ^,сз^) = 0 ТО
    Вывод.Цепь("^собственные значения:^");
    МатрВВ.ВыводВект("%12.3e",сз^);
    ЕСЛИ порядок < 7 ТО
      Вывод.Цепь("^собственные вектора:^");
      МатрВВ.ВыводМатр("%10.6f",СВ^)
    КОН
  ИНАЧЕ
   Вывод.Цепь("^Нет схождения!^")
  КОН
КОН Голова;

(******************************************************************************)
УКАЗ
  Голова
КОН ПроССим. 
 



Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы